package com.servletspringboot.config;

import com.servletspringboot.servlet.ManuallyCreateServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Servlet;

/**
 * 通过配置类来创建Servlet对象，并注册
 * @Configuration 有了这个注解之后，这个类就相当于一个xml配置文件
 *                  Spring boot 的启动类 @SpringBootApplication 注解中也包含了这个注解
 *                  所以 @Bean 注解及方法也可以放到启动类中
 */
@Configuration
public class ServletConfig {

    /**
     * @Bean 相当于 applicationContext.xml 中的<bean></bean>，用于创建对象
     *          这个方法只会被执行一次，在Spring boot 启动时进行扫描
     * @return    使用@Bean 之后，方法名字任意，但是需要返回  ServletRegistrationBean 对象
     */
    @Bean
    public ServletRegistrationBean<Servlet> createServletAndRegister(){
//        手动创建Servlet
        ManuallyCreateServlet manualCreateServlet = new ManuallyCreateServlet();

//          完成Servlet组件的注册
        ServletRegistrationBean<Servlet> servletServletRegistrationBean = new ServletRegistrationBean<>();

//        也可以在构造器中传入Servlet
        servletServletRegistrationBean.setServlet(manualCreateServlet);

//        给注册的Servlet指定URI
        servletServletRegistrationBean.addUrlMappings("/manuallyCreateServlet");

        return servletServletRegistrationBean;
    }
}
